\documentclass [A4,12pt] {article}
\usepackage[french]{babel} % francisation                                                                                                                                                         
\usepackage[T1]{fontenc} % pour taper les lettres accentuées
\usepackage{amsmath}       
\usepackage{amsthm}
\usepackage{makeidx}
\usepackage[utf8x]{inputenc}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{fancyhdr}
\hypersetup{colorlinks,%
            citecolor=black,%
            filecolor=black,%
            linkcolor=black,%
            urlcolor=black}
\usepackage{listings}
\usepackage{makeidx}
\makeindex

\lstset{formfeed=\newpage , 
		showstringspaces=false,
		extendedchars=false ,
		tabsize=1,
		basicstyle=\footnotesize ,
		language=java,
		breaklines=true,
		frameround=fttt}

% mettre titre sous figure
%%%% debut macro %%%%
\makeatletter
\def\captionof#1#2{{\def\@captype{#1}#2}}
\makeatother
%%%% fin macro %%%%
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot[R]{\thepage}
%
\author{Bouillac Bastien\\Capelle Thomas\\Nahelou Sébastien\\Noret Frédéric\\ \\\textbf{Clients} :\\Chaumette Serge\\ Ouoba Jonathan}
\date{}
\title{\rule{\linewidth}{1pt}\\\textbf{Table interactive NFC}\\ Cahier des charges\\\rule{\linewidth}{1pt}}
\bibliographystyle{unsrt}
\makeindex
\begin{document}
\addtolength{\topmargin}{+0pt}
\maketitle
\newpage
\tableofcontents
\newpage

\section{Introduction}
Le but de ce projet est de concevoir une table interactive utilisant la technologie NFC (Near Field Communication). La table sera composée de tags permettant de générer des actions sur le téléphone. Ces actions pourront être activées en déplaçant le téléphone sur la table.\\

\section{Cahier des charges} %% trouver un autre titre

Les interactions devront se faire le plus naturellement possible pour l'utilisateur.

\subsection{Initialisation}
Avant de pouvoir interagir avec la table NFC il faudra initialiser les tags du support. Pour cela l'utilisateur devra écrire sur chaque tag dans un ordre défini :\\
\begin{figure}[!ht]
\centering \includegraphics[scale=0.2]{images/initialisation-tags.png}
\caption{Initialisation de la matrice}
\end{figure}


\subsection{Mesures de temps}
Après avoir fait plusieurs tests de lecture et d'écriture, nous avons remarqué un temps relativement long pour effectuer ces actions. Nous avons donc mesuré les temps de détection, de lecture et d'écriture sur les 2 types de tags à notre disposition et avec différents téléphones :
le Nexus S en version 2.3 puis en version 4.0, et le Galaxy Nexus en version 4.0.\\

Tags ronds : \\
\begin{tabular}{|l|r|r|r|}
\hline
& Detection (ms) & Lecture (ms)& Écriture (ms)\\\hline
Nexus S  Android 2.3 & 1264 & 4 & 245\\
Nexus S  Android 4.0 & 1096 & 12 & 110 \\
Galaxy Nexus & 1137 & 1 & 126 \\
\hline
\end{tabular}
\\

Tags rectangle : \\
\begin{tabular}{|l|r|r|r|}
\hline
& Detection (ms) & Lecture (ms)& Écriture (ms)\\\hline
Nexus S  Android 2.3 & 1438 & 4 & 272\\
Nexus S  Android 4.0 & 1106 & 15 & 128 \\
Galaxy Nexus & 1117 & 1 & 126 \\
\hline
\end{tabular}

%% INSERER LE TABLEAU !!

\subsection{Gestion des mouvements}
Nous devons également fournir une interface de gestion de mouvements : aussi bien pour enregistrer que pour détecter un mouvement de manière relative ou absolue. 
La gestion des mouvements peut se faire de deux manières différentes :\\
\begin{description}
\item \underline{Absolue :} calcule le chemin par rapport aux coordonnées des tags.
\item \underline{Relative :} créer un chemin par rapport aux offsets en X et en Y.
\end{description}
Chaque mouvement pourra être associé à une action prédéfinie : aussi bien sur le téléphone que sur un service distant.\\
\begin{figure}[!ht]
\centering \includegraphics[scale=0.2]{images/interactions.png} \caption{Interactions}
\end{figure}

\section{Implémentation}
Pour faciliter la programmation d'applications interactives avec des tables NFC, nous allons développer une bibliothèque. Elle devra gérer les mouvements sur la table, la lecture et l'écriture de tags NFC.

\subsubsection{Lecture et écriture des tags : }
Avant de pouvoir détecter et gérer des mouvements, il nous fallait pouvoir lire des tags, et également écrire pour certaines actions, nous avons donc développé un module permettant de gérer la communication entre le téléphone et un tag NFC. %% développer un peu, j'suis pas inspiré là...

Afin de normaliser le contenu des tags, nous avons défini une classe qui contient :
\begin{itemize}
\item les coordonnées d'un tag : permet de savoir où se situe le téléphone de la matrice
\item la taille de la matrice : permet de faciliter l'affichage de la matrice sur le téléphone
\item une variable de type Object : permet de stocker les données lues ou à écrire
\end{itemize}

\subsection{Gestion des mouvement}
%% décrire l'implémentation, base de données, fonction compare, taux de tolérance aux ratage de tags
Nous avons définie un mouvement par une liste de coordonnées. Ces coordonnées sont celle des tags de notre mouvement.
Afin de gérer les mouvement nous avons créé une classe abstraite GestureNFC. Elle permet de créer un mouvement. Pour comparer un mouvement à un autre nous avons deux classes qui étende GestureNFC pour les deux types de mouvement: AbsoluteGesture et RelativeGesture.
Ces classe contiennent chacune la fonction de comparaison approprié en relatif et absolut.



\section{Applications développées}
\subsection{Paint}
Après avoir initialisé une matrice de tags, l'application Paint propose deux modes différents: un mode écriture et un mode lecture.
Le mode écriture permet de dessiner sur la matrice de tag. Il suffit de choisir une couleur puis en passant le téléphone sur un tag, lui affecter cette couleur. On peut ainsi dessiner sur la matrice. Il est possible de voir ce que l'on dessine avec le bouton preview. Le mode lecture permet d'afficher le dessin qui est écrit sur la matrice en la parcourant avec son téléphone.

\subsection{Lancement d'application}
Toujours sur une matrice de tags initialisé, il est possible d'enregistrer une sequence de tags et de lui associer l'ouverture d'une application.
%\texttt{\paragraph{Gestion de mouvements : }
%Pour différencier les mouvements, des classes sont utilisées pour représenter les mouvements relatifs et absolus : l'une permet de sauvegarder les offsets entre chaque tag scanné l'autre stocker les coordonnées de chaque tag du chemin : 
%%%insérer l'UML}

\section{Problèmes}
Après avoir fait des tests de mesures, le temps de détection d'un tag est au alentour de 1 seconde. Ce temps ne permet pas de définir des mouvements de manières fluides, l'utilisateur doit garder le téléphone au dessus d'un tag durant cette seconde donc même en écartant les tags les mouvements ne pourront pas être fait correctement.

% idée : ameliorer l'antenne
% 		 

\end{document}
